在介紹過監控、yaml 控管、網路的端點暴露與附載平衡後,官方有給我們一些在,生產環境部署的建議。透過調整這些設定與部署方式,應可以使我們的 Open-Match 在水平拓展性、穩定性與可用性有更好的表現。
這項設定的主要目的在於,我們使用 kubernetes 做水平拓展時,部分 pods 結束導致 gRPC 連線中斷,此時透過此設置,可以依據設置的檢查時間,適時地清除一些沒有反應的連線。以下為 client side & server side 的設置範例。
client side (參考 demo client 調整)
conn, err = grpc.Dial("open-match-frontend.open-match.svc.cluster.local:50504", grpc.WithKeepaliveParams(
keepalive.ClientParameters{
Time: 20 * time.Second,
Timeout: 10* time.Second,
PermitWithoutStream: true,
},
))
server side (參考 soloduel 調整)
server := grpc.NewServer(
grpc.KeepaliveEnforcementPolicy(
keepalive.EnforcementPolicy{
MinTime: 10 * time.Second,
PermitWithoutStream: true,
},
),
)
這部分個人認為是必須的,所以先前已經先透過 istio 做掉了,可以參考先前的介紹 Day23 Load balance with Istio。也可以參考官方提出的,使用 gRPC DNS resolver 解法試試。
如果是採用 helm 部署 Op-Match 的話,預設 values sentinel 就已經是啟用的了,哨兵模式可以提供高可用性的 redis 服務,讓 Open-Match 有更穩定的表現,但同時啟用哨兵模式時,會消耗更多的資源,這點需要依自身使用的需求評估使否開啟。更多哨兵模式相關知識。
如同我們在 Day23 做過的,bitnami/redis 提供了我們高可用,且可自定義的 redis chart,通過 helm 指定參數部署,可以客製化自己想要的 redis,與 Open-Match 的溝通只需記得,部署核心時給定 redis host 即可。
helm install open-match --create-namespace --namespace open-match open-match/open-match \
--set open-match-customize.enabled=true \
--set open-match-customize.evaluator.enabled=true \
--set open-match-override.enabled=true \
--set open-match-core.redis.enabled=false \
--set open-match-core.redis.hostname= # Your redis server address